// function fn(x: number, y: number): number {
//   return x + y
// }

// let fun: (x: number, y: number) => number

// fun = function (x: number, y: number): number {
//   return x + y
// }

// let fun1 = (x: number, y: number): number => {
//   return x + y
// }

// 注意: 可选参数必须写在必填参数的后面
// function fn(x: number, y?: number): number {
//   return x + y
// }

// fn(1, 2)

// 注意: 一个必填的参数有了默认值,则这个参数也可以不写
// function fn(x: number = 3, y: number): number {
//   return x + y
// }
// fn(undefined, 2)

// function fn(x: number, ...args: any[]): number {
//   return x
// }
// fn(1, 2, 3, 4)
// function reverse(x: number): number
// function reverse(x: string): string
// function reverse(x: number | string): number | string {
//   if (typeof x === 'number') {
//     return Number(x.toString().split('').reverse().join(''))
//   } else if (typeof x === 'string') {
//     return x.split('').reverse().join('')
//   }
// }

// reverse('abc')

interface Ifun {
  (x: number, y: number): number
}
let fun: Ifun
fun = function (x: number, y: number): number {
  return x + y
}
